# 自定义过滤器
from flask import session, current_app, g, jsonify
import functools

from info.response_code import RET


def do_index_class(index):
    if index == 1:
        return "first"
    elif index == 2:
        return "second"
    elif index == 3:
        return "third"


"""
问题：只要使用装饰器装饰函数，装饰器会改变函数的函数名称&函数的内部注释,导致使用url_for反向解析导致错误会

解决方案： 1.导入import functools
         2.@functools.wraps(func)装饰到wrapper内层装饰器函数上
"""


# 自定义一个视图函数,将查询用户对象进行封装,直接通过g对象进行调用用户对象
def user_login_data(view_func):
    @functools.wraps(view_func)
    def wrapper(*args, **kwargs):
        # 1.1通过session获取用户id
        user_id = session.get("id")

        user = None
        # 1.1. 如果用户id存在
        if user_id:
            # 1.2通过用户id查询用户信息,查询结果为一个用户对象
            # 查询用户信息
            try:
                # 延迟导入User解决循环导入问题
                from info.models import User
                user = User.query.get(user_id)
            except Exception as result:
                current_app.logger.error(result)

        # 将用户对象保存到g对象中
        g.user = user
        # 执行被修饰函数原有的功能
        return view_func(*args, **kwargs)

    return wrapper
